package traveldreampm.ejb.dtos;

import java.util.Calendar;
import java.util.Date;

public class ComposizioneDTO {
	private Date dataInizio;
	private Date dataFine;
	private int idProdotto;

	public Date getDataInizio() {
		return dataInizio;
	}

	public void setDataInizio(Date dataInizio) {
		this.dataInizio = dateCutTime(dataInizio);
	}

	public Date getDataFine() {
		return dataFine;
	}

	public void setDataFine(Date dataFine) {
		this.dataFine = dateCutTime(dataFine);
	}

	public int getIdProdotto() {
		return idProdotto;
	}

	public void setIdProdotto(int idProdotto) {
		this.idProdotto = idProdotto;
	}

	public String toString() {
		return "COMPOSIZIONE: idProdotto: " + this.getIdProdotto()
				+ " dataInzio:" + this.getDataInizio().toString()
				+ " dataFine:" + this.getDataFine().toString();
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ ((dataFine == null) ? 0 : dataFine.hashCode());
		result = prime * result
				+ ((dataInizio == null) ? 0 : dataInizio.hashCode());
		result = prime * result + idProdotto;
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		ComposizioneDTO other = (ComposizioneDTO) obj;
		if (dataFine == null) {
			if (other.dataFine != null)
				return false;
		} else if (!dataFine.equals(other.dataFine))
			return false;
		if (dataInizio == null) {
			if (other.dataInizio != null)
				return false;
		} else if (!dataInizio.equals(other.dataInizio))
			return false;
		if (idProdotto != other.idProdotto)
			return false;
		return true;
	}
	
	private Date dateCutTime(Date data) {
		Calendar calendar = Calendar.getInstance();
		
		calendar.setTime(data);
		calendar.set(Calendar.HOUR_OF_DAY, 0);
	    calendar.set(Calendar.MINUTE, 0);
	    calendar.set(Calendar.SECOND, 0);
	    calendar.set(Calendar.MILLISECOND, 0);
	    
	    return calendar.getTime();

	}
	
	public int getDurationInDays() {
		return (int) ((this.getDataFine().getTime() - this.getDataInizio().getTime()) / (1000 * 60 * 60 * 24));
	}

}
